home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib16.dsk / EPSON MX-80 PLOTTER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  124 lines

  1. 1  REM  **********************
  2. 2  REM  *   MX-80  PLOTTER   *
  3. 3  REM  * BY  SETH MCCORMICK *
  4. 4  REM  * COPYRIGHT (C) 1983 *
  5. 5  REM  * BY MICROSPARC, INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 100  TEXT : HOME : GOTO 2010
  9. 200  REM  --SUBR:COLLECT DATA IN STR--
  10. 210 Y$(V) = Y$(V) + CHR$(H +30): RETURN 
  11. 220 Y$(H) =  CHR$(V +30): RETURN 
  12. 250  REM  --SUBR:COMPUTE VERT SCALES--
  13. 260 Y$ =  STR$( FN A(I *T +C)): RETURN 
  14. 270 Y$ =  STR$( FN A((B -A) *I/N +A)): RETURN 
  15. 300  REM  --SUBR:COMPUTE HORIZ SCALES--
  16. 310 X$ =  STR$( FN A((B -A) *I *M/N +A)): RETURN 
  17. 320 X$ =  STR$( FN A(I *M *T +C)): RETURN 
  18. 400  REM  --SUBR:DATA&SCALES MIXER--
  19. 410  FOR J = 1 TO  LEN(Y$(I))
  20. 420 Y(J) =  ASC( MID$ (Y$(I),J,1)) -30
  21. 430  IF Y(J) <0  OR Y(J) >50  THEN 470
  22. 440  IF Y(J) = 0  THEN VH$ = S1$ + RIGHT$(VH$,N): GOTO 470
  23. 450  IF Y(J) = N  THEN VH$ =  LEFT$(VH$,N) +S1$: GOTO 470
  24. 460 VH$ =  LEFT$(VH$,Y(J)) +S1$ + RIGHT$(VH$,N -Y(J))
  25. 470  NEXT : RETURN 
  26. 480  REM  --SUBR:PRINT TITLE
  27. 490  PRINT  TAB( 35 - LEN(TI$)/2);TI$: PRINT : RETURN 
  28. 500  REM  --SUBR:X-Y SCALE PARAMETERS--
  29. 510  PRINT  TAB( 15);"X-AXIS RANGES FROM ";A;" TO ";B;" IN STEPS OF "; FN A((B -A)/N): RETURN 
  30. 520  PRINT  TAB( 15);"Y-AXIS RANGES FROM "; FN A(C);" TO "; FN A(D);" IN STEPS OF "; FN A(T): RETURN 
  31. 600  REM  --SUBR:X FACTORS AND--
  32. 610  REM  --X-AXIS PARAMETERS---
  33. 620  FOR I = 0 TO 9:SP$ = SP$ +" ": NEXT 
  34. 630  FOR I = 0 TO 5: ON PL% GOSUB 310,320
  35. 640 XF$ = XF$ +X$ + LEFT$(SP$,M - LEN(X$)): NEXT 
  36. 650  PRINT  CHR$(27)"0":XF$ =  LEFT$(XF$,N + LEN(XF$)): PRINT  TAB( 10);XF$: PRINT  CHR$(27)"2": RETURN 
  37. 700  REM  --SET LOOP PARAMETERS--
  38. 710 L% = N:M% = 0:S% =  -1: RETURN 
  39. 720 L% = 0:M% = N:S% = 1: RETURN 
  40. 800  REM  --TRANSFER VARIABLE---
  41. 810 Y = Y(I): RETURN 
  42. 900  REM  --COMPUTE FUNCTION---
  43. 990 X = S *I +A
  44. 1000 Y = 2.7183 ^( -X) * SIN(2 *X)
  45. 1500  RETURN 
  46. 2000  REM  --MAIN MENU--
  47. 2010  TEXT : HOME : VTAB 20: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **":: VTAB 6: HTAB 13: PRINT "MX-80 PLOTTER": PRINT : PRINT 
  48. 2020  HTAB 6: PRINT "ENTER FUNCTION TO BE PLOTTED": PRINT : HTAB 4: PRINT "AS AN EQUATION (LINES 1000 TO 1500)": PRINT 
  49. 2030  HTAB 6: PRINT "IN THE FORM: Y = FUNCTION OF X": PRINT : PRINT : PRINT 
  50. 2040  HTAB 6: PRINT "IS THE FUNCTION ENTERED (Y/N)? ";: GET A$
  51. 2050  IF A$ = "N"  THEN  END 
  52. 2060  HOME : VTAB 4: HTAB 4: PRINT "INSTRUCTIONS"
  53. 2070  PRINT : PRINT : HTAB 6: PRINT "1.BE SURE THAT THE PRINTER IS ON"
  54. 2080  PRINT : HTAB 6: PRINT "2.YOU WILL BE ASKED TO CHOOSE THE": PRINT : HTAB 8: PRINT "PLOTTING FORMAT AND THE X- AND": PRINT : HTAB 8: PRINT "Y-AXIS PARAMETERS NEXT"
  55. 2090  VTAB 20: HTAB 8: PRINT "HIT ANY KEY TO CONTINUE ";: GET A$
  56. 2100  HOME : VTAB 8: HTAB 4: PRINT "SPECIFY PLOTTING FORMAT:"
  57. 2110  PRINT : PRINT : HTAB 4: PRINT "1. X-AXIS HORIZONTAL (ACROSS PAGE)"
  58. 2120  PRINT : HTAB 4: PRINT "2. X-AXIS VERTICAL (DIRECTION SHEET": HTAB 7: PRINT "MOVES)"
  59. 2130  PRINT : PRINT : HTAB 10: INPUT "CHOOSE 1 OR 2 ";PL%
  60. 2140  HOME : VTAB 10: HTAB 4: PRINT "ENTER RANGE OF X VALUES TO COMPUTE:"
  61. 2150  PRINT : PRINT : HTAB 6: INPUT "1. ENTER MINIMUM X VALUE ";A
  62. 2160  PRINT : HTAB 6: INPUT "2. ENTER MAXIMUM X VALUE ";B
  63. 2170  HOME : VTAB 4: HTAB 4: PRINT "IF YOU DON'T SPECIFY THE Y RANGE,": PRINT : HTAB 4: PRINT "THE PROGRAM WILL NORMALIZE Y VALUES": PRINT 
  64. 2180  HTAB 4: PRINT "TO FILL THE PLOTTING SPACE EXACTLY": PRINT : PRINT : PRINT 
  65. 2190  HTAB 7: PRINT "DO YOU WANT TO SPECIFY": HTAB 7: PRINT "THE Y RANGE (Y/N) ? ";: GET A$: PRINT : PRINT 
  66. 2200  IF A$ < >"Y"  THEN YR% = 1: GOTO 2260
  67. 2210 YR% = 2: HTAB 7: INPUT "1.ENTER MINIMUM Y VALUE ";C
  68. 2220  PRINT : HTAB 7: INPUT "2.ENTER MAXIMUM Y VALUE ";D
  69. 2260  HOME : VTAB 6: HTAB 4: PRINT "HOW MANY POINTS DO YOU WANT TO PLOT?": PRINT : HTAB 6: INPUT "ENTER A NUMBER FROM 10 TO 50: ";P
  70. 2270  IF P <10  OR P >50  THEN  HOME : VTAB 8: GOTO 2260
  71. 2280  HOME : VTAB 6: HTAB 6: PRINT "TYPE IN THE TITLE OF YOUR GRAPH:": PRINT : INPUT "  ";TI$
  72. 2290  IF  LEN(TI$) <51  THEN  HOME : VTAB 6: GOTO 2320
  73. 2300  VTAB 12: HTAB 10: PRINT "TITLE IS TOO LONG BY "; LEN(TI$) -51: PRINT 
  74. 2310  HTAB 8: PRINT "HIT ANY KEY TO CONTINUE ";: GET A$: GOTO 2280
  75. 2320  VTAB 10: HTAB 6: PRINT "CHOOSE ANY CHARACTER EXCEPT": PRINT : HTAB 6: PRINT ". (PERIOD) TO PLOT DATA POINTS."
  76. 2330  PRINT : HTAB 6: PRINT "YOU CAN PRINT EITHER AN UPPER": PRINT : HTAB 6: PRINT "OR LOWER CASE CHARACTER": PRINT : HTAB 10: PRINT "ENTER A CHARACTER ";: GET S1$
  77. 2340  IF S1$ = "."  THEN  HOME : VTAB 9: HTAB 7: PRINT "ANYTHING BUT A PERIOD!!": VTAB 22: HTAB 7: PRINT "HIT ANY KEY TO CONTINUE ";: GET A$: HOME : GOTO 2320
  78. 2350  IF  ASC(S1$) <65  OR  ASC(S1$) >90  THEN 3010
  79. 2360  PRINT : PRINT : HTAB 6: PRINT "DO YOU WANT LOWER CASE? (Y/N) ";: GET A$: IF A$ < >"Y"  THEN 3010
  80. 2370 S1$ =  CHR$( ASC(S1$) +32)
  81. 3000  REM  --SET UP VARIABLES---
  82. 3010  DIM Y$(51),Y(51)
  83. 3020 M = 10:N = 50
  84. 3030 S = (B -A)/P
  85. 3040  DEF  FN I(X) =  INT(X +.5): DEF  FN A(X) =  INT(100 *X +.5)/100: DEF  FN M(X) = X - INT(X/5) *5
  86. 3500  REM  --COMPUTE DATA POINTS--
  87. 3510  IF YR% < >1  THEN 3800
  88. 3530  FOR I = 0 TO P
  89. 3540  GOSUB 990:Y(I) = Y
  90. 3550  IF Y(I) >D  THEN D = Y(I)
  91. 3560  IF Y(I) <C  THEN C = Y(I)
  92. 3570  NEXT 
  93. 3800 T = (D -C)/N
  94. 4000  REM  --CONVERT DATA TO TABS-
  95. 4010  REM  --AND PUT IN STR ARRAY-
  96. 4020  FOR I = 0 TO P
  97. 4030  ON YR% GOSUB 810,990
  98. 4040 V =  FN I((Y -C)/T)
  99. 4050 H =  FN I(N *I/P)
  100. 4060  IF V <0  OR V >50  THEN 4080
  101. 4070  ON PL% GOSUB 210,220
  102. 4080  NEXT : PR# 1
  103. 4090  HOME : GOSUB 490
  104. 4100  ON PL% GOSUB 520,510
  105. 4110  REM  --CREATE SCALE STR---
  106. 4120  FOR I = 0 TO 50:H$ = H$ +".": NEXT 
  107. 4130  FOR I = 0 TO 4:V$ = V$ +".         ": NEXT :V$ = V$ +"."
  108. 5000  REM  --COMBINE DATA WITH---
  109. 5010  REM  --SCALES AND PRINT----
  110. 5020  ON PL% GOSUB 710,720
  111. 5030  IF PL% < >2  THEN  PRINT  CHR$(27)"1"
  112. 5040  FOR I = L% TO M%  STEP S%
  113. 5050  IF  FN M(I) < >0  THEN 5100
  114. 5060 VH$ = H$
  115. 5070  IF Y$(I) < >""  THEN  GOSUB 410
  116. 5080  ON PL% GOSUB 260,270
  117. 5090  PRINT  TAB( 9 - LEN(Y$));Y$;" ";VH$: GOTO 5130
  118. 5100 VH$ = V$
  119. 5110  IF Y$(I) < >""  THEN  GOSUB 410
  120. 5120  PRINT  TAB( 10);VH$
  121. 5130  NEXT 
  122. 5140  GOSUB 620
  123. 5150  ON PL% GOSUB 510,520
  124. 5160  PR# 0: PRINT : END